home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / DUMP.XPL < prev    next >
Text File  |  2001-09-30  |  2KB  |  116 lines

  1. \DUMP.XPL    APR-10-87
  2. \Program to dump the disk
  3.  
  4. \REVISION HISTORY:
  5. \FEB-26-86, Modified for 68000, L.B.
  6. \APR-10-87, Changed string termination.
  7.  
  8. code    REM=2,        RESERVE=3,    CHIN=7,        CHOUT=8,
  9.     CRLF=9,        INTIN=10,    INTOUT=11,    TEXT=12,
  10.     OPENI=13,    OPENO=14,    CLOSE=15,    TRAP=17,
  11.     ERRFLG=22,    READ=31;
  12.  
  13. int    ODEV,        \Output device number
  14.     UNIT,        \Unit number
  15.     BLKNUM,        \Block number
  16.     FBLK,        \First block
  17.     LBLK;        \Last block
  18. addr    BLOCK;        \Hold working block of disk data
  19.  
  20. \----------------------------------------------------------------------
  21.  
  22. proc    BYTEOUT(N);    \Output N as 2 hex digits
  23. int    N;
  24. int    R;
  25. addr    HEXTBL;
  26. begin
  27. HEXTBL:="0123456789ABCDEF";
  28. N:= (N&$FF)/16;
  29. R:= REM(0);
  30. CHOUT(ODEV, HEXTBL(N));
  31. CHOUT(ODEV, HEXTBL(R));
  32. end;    \BYTEOUT
  33.  
  34. \----------------------------------------------------------------------
  35.  
  36. proc    READBLK;    \Read a block from UNIT
  37. begin
  38. \if ERRFLG then;            \\Flush errors
  39. \TRAP(false);
  40. READ(UNIT,BLKNUM,BLOCK,1);
  41. \TRAP(true);
  42. \if ERRFLG then
  43. \    begin
  44. \    TEXT(0,"READ ERROR ON BLOCK NUMBER ");
  45. \    INTOUT(0,BLKNUM);
  46. \    CRLF(0);
  47. \    end;
  48. end;    \READBLK
  49.  
  50. \----------------------------------------------------------------------
  51.  
  52. proc    SHOWCH(CH);    \Show character
  53. int    CH;
  54. begin
  55. CH:= CH&$7F;
  56. CHOUT(ODEV, if CH<$20 ! CH>=$7F then ^. else CH);
  57. end;    \SHOWCH
  58.  
  59.  
  60.  
  61. proc    SHOWBLK;    \Show the block
  62. int    X,Y;
  63. begin
  64. CRLF(ODEV);
  65. TEXT(ODEV,"BLOCK NUMBER "); INTOUT(ODEV,BLKNUM); CRLF(ODEV);
  66. CRLF(ODEV);
  67.  
  68. for X:=0, 15 do
  69.     begin
  70.     BYTEOUT(X *16);
  71.     TEXT(ODEV,":  ");
  72.     for Y:=0, 15 do
  73.         begin
  74.         BYTEOUT(BLOCK(X *16 + Y));
  75.         Y:= Y+1;
  76.         BYTEOUT(BLOCK(X *16 + Y));
  77.         CHOUT(ODEV,^ );
  78.         end;
  79.     TEXT(ODEV,"  ");
  80.     for Y:=0, 15 do SHOWCH(BLOCK(16*X +Y));
  81.     CRLF(ODEV);
  82.     end;
  83. end;    \SHOWBLK
  84.  
  85. \----------------------------------------------------------------------
  86.  
  87. begin    \MAIN
  88. BLOCK:= RESERVE(256);
  89. TEXT(0,"-- DISK DUMP, V1.8x2 --
  90. OUTPUT DEVICE? ");
  91. ODEV:= INTIN(0);
  92.  
  93. TEXT(0,"UNIT? ");
  94. UNIT:= INTIN(0);
  95.  
  96. OPENO(ODEV);
  97. loop    begin
  98.     TEXT(0,"FIRST BLOCK? ");
  99.     FBLK:= INTIN(0);
  100.     TEXT(0,"LAST BLOCK?  ");
  101.     LBLK:= INTIN(0);
  102.     for BLKNUM:=FBLK,LBLK do
  103.         begin
  104.         READBLK;
  105.         SHOWBLK;
  106.         CRLF(ODEV);
  107.         end;
  108.     TEXT(0,"MORE (N/Y)? ");
  109.     OPENI(0);
  110.     if (CHIN(0)!$20)#^y then quit;
  111.     end;
  112. CLOSE(ODEV);
  113. end;    \MAIN
  114.         CRLF(ODEV);
  115.         end;
  116.     TEXT(0,"MORE (N/Y)?